<?php

/**
 * API输出类
 * @property int $eUnAuth	[-1001]无权限(登录已失效)
 * @property int $eParam 	[-2001]参数错误(参数输入不全,格式不对等)
 * @property int $eSystem	[-2002]系统错误(数据库错误等)
 */
class ApiOutput {
	/**
	 * 要输出的内容数组,默认error=0
	 * @var array
	 */
	private $out    = array('error'=>0);
	private $format = 'json';
	private  $header = 'Content-type:application/json;';
	// 统一的全局错误代码
	public $eUnAuth     = -1001;
	public $eParam      = -2001;
	public $eSystem     = -2002;
	public $debug       = FALSE;
	function __construct() {
		//$this->debug = defined('IS_TEST') && IS_TEST;
	}
	public function setFormatHtml(){
		$this->format = 'html';
	}



	/**
	 * 输出错误
	 * @param string $msg
	 * @param int $code
	 * @param bool $isOut	是否输出(默认TRUE)
	 * @param bool $isExit	是否退出(默认TRUE)
	 */
	function error($msg,$code=-1,$isOut=TRUE,$isExit=TRUE){
		if( $this->format ==='html' ){
			alert($msg);
			exit();
		}

		$this->hasError = TRUE;
		$this->out['error'] = $code;
		$this->out['msg']   = $msg;
		if( $isOut ){
			$this->out(NULL,$isExit);
		}
	}
	/**
	 * 输出消息(字段名"msg")
	 * @param string $msg
	 * @param bool $isOut
	 * @param bool $isExit
	 */
	function msg($msg,$isOut=TRUE,$isExit=TRUE){
		$this->out['msg'] = $msg;
		if( $isOut ){
			$this->out(NULL,$isExit);
		}
	}

	/**
	 * 往输出数组中增加变量
	 * @param string $key 键名
	 * @param mixed  $val 键值
	 */
	function put($key,$val){
		$this->out[$key] = $val;
		return $this;
	}
	/**
	 * 打印输出数组
	 * @param array $out
	 * @param bool $isExit
	 */
	function out($out=array(),$isExit=TRUE){
		if (!empty($out)) {
			if ( is_object($out) ){
				$out = (array)$out;
			}
			if ( is_array($out) ){
				$this->out = array_merge($this->out,$out);//后面的数组会覆盖前面的数组中同键名的元素
			}else if ( is_string($out) ){
				$this->out['msg'] = $out;
			}
		}
		if( $this->debug  ){
			$this->out['debug'] = MyDebug::$data;
		}
		echo json_encode($this->out);
		if( $isExit ){
			exit;
		}
	}
	/**
	 * 输入参数错误
	 * @param string $msg 错误消息,默认:'输入参数错误'
	 * @param bool $isOut 是否直接输出,默认TRUE
	 * @param bool $isExit 是否退出,默认TRUE
	 */
	function errorInput($msg='',$isOut = TRUE ,$isExit = TRUE){
		$msg = empty($msg) ? '输入参数错误' : $msg;
		return $this->error($msg,$this->eParam,$isOut,$isExit);
	}
	/**
	 * 系统错误
	 * @param string $msg 错误消息,默认:'系统繁忙,请稍后再试!'
	 * @param bool $isOut 是否直接输出,默认TRUE
	 * @param bool $isExit 是否退出,默认TRUE
	 */
	function errorSystem($msg='',$isOut = TRUE ,$isExit = TRUE){
		$msg = empty($msg) ? '系统繁忙,请稍后再试!' : $msg;
		return $this->error($msg,$this->eSystem,$isOut,$isExit);
	}

}


class MyDebug{
	static $data;
	static function push($flag,$val){
		self::$data[$flag][] = $val;
	}
	static function log($msg,$data=''){
		if( $data!=='' && is_string($msg) ){
			self::$data[$msg] = $data;
		}else{
			self::$data [] = $msg;
		}
	}

}

